iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Software Development

新手村的練功筆記系列 第 23 篇

Day 23 SQL - GROUP BY & HAVING

  • 分享至 

  • xImage
  •  

今日課程範圍
SQL Lesson 3: Queries with constraints (Pt. 2)
https://sqlbolt.com/lesson/select_queries_with_constraints_pt_2

今天我們來學習一個好用的SQL語法
GROUP BY & HAVING

當我們想要對以某個項目進行分組 並在分組後再以特定條件進行篩選要如何進行呢?

例如班級躲避球賽 先亂數拆成兩隊 並找出各隊最高的人出來猜拳決定誰先攻

這種先分組再進行條件的限制 便是GROUP BY & HAVING派上用場的地方
想必你一定很好奇 我們先前不是學過可以使用WHERE來進行條件的篩選嗎?

那為什麼這邊要用HAVING 而不用 WHERE 呢?
我們想像一下 亂數拆隊就表示這個是臨時的 並非真正的編制
因此在原始編制的資料中並不實際存在

WHERE 無法使用在這個由GROUP BY 產生的臨時分組數據上
因此就需要用HAVING 語法來進行條件限制

我們實際來練習看看吧

第一題

第一題我們要找出所有Artists的人數
並且限制我們不要使用HAVING的寫法

我們可以使用WHERE來限制條件(Role = "Artist")
然後用COUNT()來計算人數

SELECT Role, COUNT(name) AS "Number of Artists" FROM employees
WHERE Role = "Artist"

第二題

第二題我們要找出各個Role的人數

因此我們可以使用 GROUP BY 先進行分組
再計算各組的人數即可

SELECT Role,Building,COUNT(name) AS "number of Employees"
FROM employees
GROUP BY Role

第三題

第三題稍微複雜一點點
我們要找出Role為工程師的人,與這些人的合計年資

因此 我們一樣先使用GROUP BY 進行分組
然後使用HAVING加入限制條件
最後再計算合計的總年資

SELECT Role,Building,SUM(Years_employed
) AS "total number of years employed"  FROM employees
GROUP BY Role
HAVING Role = "Engineer"

今天的練習先到這邊
GROUP BY是個相當好用的語法
對於我們在對資料進行分組上有很大的用處

我們明天再繼續


上一篇
Day 22 SQL - Aggregate function
下一篇
Day 24 SQL - 查詢(Query)語法複習
系列文
新手村的練功筆記 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言